﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Chilis.Franquicias.EnEntidad;
using Chilis.Franquicias.Common;
using Chilis.Franquicias.Web.ServiceControler;
using Chilis.Franquicias.Web.Models.ViewModel;

namespace Chilis.Franquicias.Web.Controllers
{
    public class CandidatoController : Controller
    {
        //
        // GET: /Candidato/

        public ActionResult Buscar()
        {
            CandidatoViewModel oCandidatoViewModel = new CandidatoViewModel();
            oCandidatoViewModel.FQ_Candidato = new FQ_Candidato();
            oCandidatoViewModel.ListaFQ_TipoCandidato = new ListaFQ_TipoCandidato();
            oCandidatoViewModel.ListaFQ_TipoDocumento = new ListaFQ_TipoDocumento();

            oCandidatoViewModel.ListaFQ_TipoCandidato = CandidatoServiceControler.ListaTipoCandidato();
            oCandidatoViewModel.ListaFQ_TipoDocumento = CandidatoServiceControler.ListaTipoDocumento();
            return View(oCandidatoViewModel);         
        }

        public ActionResult Nuevo(Int32 ID = 0)
        {
            CandidatoViewModel oCandidatoViewModel = new CandidatoViewModel();
            if (ID != 0)
            {
                oCandidatoViewModel.FQ_Candidato = new FQ_Candidato();
                oCandidatoViewModel.ListaFQ_TipoCandidato = new ListaFQ_TipoCandidato();
                oCandidatoViewModel.ListaFQ_TipoDocumento = new ListaFQ_TipoDocumento();
                oCandidatoViewModel.ListaFQ_Departamento = new ListaFQ_Departamento();
                oCandidatoViewModel.ListaFQ_Provincia = new ListaFQ_Provincia();
                oCandidatoViewModel.ListaFQ_Distrito = new ListaFQ_Distrito();                
                oCandidatoViewModel.FQ_Candidato = CandidatoServiceControler.SeleccionarCandidato_Por_ID(ID);
                oCandidatoViewModel.ListaFQ_Provincia = CandidatoServiceControler.ListaProvincia(oCandidatoViewModel.FQ_Candidato.FQ_Distrito.FQ_Provincia.FQ_Departamento.FQ_Departamento_ID);
                oCandidatoViewModel.ListaFQ_Distrito = CandidatoServiceControler.ListaDistrito(oCandidatoViewModel.FQ_Candidato.FQ_Distrito.FQ_Provincia.FQ_Provincia_ID);
                oCandidatoViewModel.ListaFQ_TipoCandidato = CandidatoServiceControler.ListaTipoCandidato();
                oCandidatoViewModel.ListaFQ_TipoDocumento = CandidatoServiceControler.ListaTipoDocumento();
                oCandidatoViewModel.ListaFQ_Departamento = CandidatoServiceControler.ListaDepartamento();

            }
            else 
            {                
                oCandidatoViewModel.FQ_Candidato = new FQ_Candidato();
                oCandidatoViewModel.ListaFQ_TipoCandidato = new ListaFQ_TipoCandidato();
                oCandidatoViewModel.ListaFQ_TipoDocumento = new ListaFQ_TipoDocumento();
                oCandidatoViewModel.ListaFQ_Departamento = new ListaFQ_Departamento();
                oCandidatoViewModel.ListaFQ_Provincia = new ListaFQ_Provincia();
                oCandidatoViewModel.ListaFQ_Distrito = new ListaFQ_Distrito();
                oCandidatoViewModel.ListaFQ_TipoCandidato = CandidatoServiceControler.ListaTipoCandidato();
                oCandidatoViewModel.ListaFQ_TipoDocumento = CandidatoServiceControler.ListaTipoDocumento();
                oCandidatoViewModel.ListaFQ_Departamento = CandidatoServiceControler.ListaDepartamento();
                oCandidatoViewModel.FQ_Candidato.FechaNacimiento = DateTime.Now;
            }

            return View(oCandidatoViewModel);       
        }

        public ActionResult BuscarCandidatoPV_Grilla(Int32 PTipoCandidato_ID = Constantes.ValorCero, Int32 PTipoDocumento_ID = Constantes.ValorCero, String PnumeroDocumento = Constantes.ValorDefecto, String PNombre = Constantes.ValorDefecto, String sort = "FQ_Candidato_ID", int page = 0, String sortDir = "DESC")
        {
            int pageIndex = page;
            CandidatoViewModel oCandidatoViewModel = new CandidatoViewModel();
            if (page == Constantes.ValorCero || page == Constantes.MenosUno)
            {
                oCandidatoViewModel.FQ_Candidato = new FQ_Candidato()
                {
                    FQ_TipoDocumento = new FQ_TipoDocumento()
                    {
                        TipoDocumento_ID = PTipoDocumento_ID
                    },
                    FQ_TipoCandidato = new FQ_TipoCandidato()
                    {
                        TipoCandidato_ID = PTipoCandidato_ID
                    },
                    NumeroDocumento = PnumeroDocumento,
                    Nombre = PNombre,
                };
            }

            if (page != Constantes.MenosUno && !(page > Constantes.ValorUno))
            {
                page = Constantes.ValorUno;
            }
            bool sw = false;
            if (page == Constantes.MenosUno)
            {
                page = Constantes.ValorUno;
                sw = true;
                Session["oCandidatoViewModel.FQ_Candidato"] = null;
            }

            if (oCandidatoViewModel == null)
            {
                oCandidatoViewModel = new CandidatoViewModel();
            }

            if (Session["oCandidatoViewModel.FQ_Candidato"] == null)
            {
                Session["oCandidatoViewModel.FQ_Candidato"] = oCandidatoViewModel.FQ_Candidato;
            }
            else
            {
                oCandidatoViewModel.FQ_Candidato = (FQ_Candidato)Session["oCandidatoViewModel.FQ_Candidato"];
            }
            int Total;

            int candidatoPorPagina = Constantes.RegistrosPorPagina;
            if (page == Constantes.ValorUno) { page = Constantes.ValorCero; } else { page = ((page - Constantes.ValorUno) * candidatoPorPagina) + Constantes.ValorUno; candidatoPorPagina--; }

            oCandidatoViewModel.RegistroPorPagina = Constantes.RegistrosPorPagina;
            oCandidatoViewModel.sortType = sortDir == "ASC" ? sort : sort + " DESC";
            oCandidatoViewModel.startRowIndex = page;
            oCandidatoViewModel.maximumRows = candidatoPorPagina;
            FQ_Candidato oFQ_Candidato = new FQ_Candidato();
            oCandidatoViewModel.ListaFQ_Candidato = CandidatoServiceControler.ListaCandidatoPaginado(oCandidatoViewModel.FQ_Candidato,
                                                                                    oCandidatoViewModel.sortType,
                                                                                    oCandidatoViewModel.maximumRows,
                                                                                    oCandidatoViewModel.startRowIndex,
                                                                                    out Total);

            oCandidatoViewModel.TotalRegistros = Total;

            oCandidatoViewModel.DescRegistrosPorPagina = UtilWebGrid.ContadorRegistrosWebGrid(
                pageIndex, oCandidatoViewModel.RegistroPorPagina, oCandidatoViewModel.TotalRegistros);

            if (sw)
            {
                return PartialView("BuscarCandidatoPV_Grilla", oCandidatoViewModel);
            }

            return View(oCandidatoViewModel);
        }

        public ActionResult EliminarCandidato(Int32 PFQ_Candidato_ID)
        {
            Int32 resultado = 0;
            CandidatoViewModel oCandidatoViewModel = new CandidatoViewModel();
            oCandidatoViewModel.FQ_Candidato = new FQ_Candidato()
            {
                FQ_Candidato_ID = PFQ_Candidato_ID
            };

            resultado = CandidatoServiceControler.EliminarCandidato(oCandidatoViewModel.FQ_Candidato);
            return Content(Convert.ToString(resultado));
        }

        public ActionResult CargarProvincias(Int32 PFQ_Departamento_ID)
        {
            CandidatoViewModel oCandidatoViewModel = new CandidatoViewModel();
            oCandidatoViewModel.ListaFQ_Provincia = CandidatoServiceControler.ListaProvincia(PFQ_Departamento_ID);
            return PartialView("Provincia", oCandidatoViewModel);
        }

        public ActionResult CargarDistritos(Int32 PFQ_Provincia_ID)
        {
            CandidatoViewModel oCandidatoViewModel = new CandidatoViewModel();
            oCandidatoViewModel.ListaFQ_Distrito = CandidatoServiceControler.ListaDistrito(PFQ_Provincia_ID);
            return PartialView("Distritos", oCandidatoViewModel);
        }

        public ActionResult RegistrarCandidato(CandidatoViewModel oCandidatoViewModel)
        {
            int resultado = 0;
            if (oCandidatoViewModel.FQ_Candidato.FQ_Candidato_ID > Constantes.ValorCero)
            {
                resultado = CandidatoServiceControler.ActualizarCandidato(oCandidatoViewModel.FQ_Candidato);                
            }
            else {
                resultado = CandidatoServiceControler.CrearCandidato(oCandidatoViewModel.FQ_Candidato);
            }
            return Content(Convert.ToString(resultado));
        }
    }
}
